//
//  main.c
//  IntModifier
//
//  Created by admin on 2019/7/19.
//  Copyright © 2019 猫爷爷的酱醋茶. All rights reserved.
//

#include <stdio.h>
/*
 
 1. int类型的修饰符
    指定Int类型的变量所占的字节数。
 
 1）short修饰符：
    在声明1个int类型的变量的时候，可以用short来修饰，int在内存中只占2个字节，16位。
    除去符号位，实际表示数据的为15位，即 2*15 最小值为：-32768 最大值为：32767
 
    a. 要输出short修饰的int类型的变量的值，应该使用占位符%hd来输出。
    short int num = 10;
    printf("num = %hd\n",num);
 
    b. 如果要声明一个short int类型的变量，那么可以省略int 直接写short.
    short num = 10;
 
 2）long修饰符：
    在32位的操作系统下，被long修饰的int类型的变量占据4个字节，不变。
    在64位的操作系统下，被long修饰的int类型的变量占据8个字节。例：LongAndShortIntSizeof();
 
     a. 要输出long修饰的int类型的变量的值，应该使用占位符%ld来输出。
     b. 如果要声明一个long int类型的变量，那么可以省略int 直接写long。
 
 3)long long 修饰符
    在32/64位操作系统中，都是占据8个字节。
 
     a. 要输出long long修饰的int类型的变量的值，应该使用占位符%lld来输出。
     b. 如果要声明一个long long int类型的变量，那么可以省略int 直接写long long。
 
 
 
2. 有无符号：
 
    In类型d中的最高位通常用来表示符号位，实际数据表示少了一位。
    如果需要符号位参与数据的表示，可以使用修饰符 unsigned.
 例：unsigned int num;
    那么这个变量的最小值为0，因为没有了正负，但是最大值翻了一倍。
 
    使用%u输出unsigned int变量的值。
    使用%hu输出unsigned short int变量的值。
    使用%lu输出unsigned long int变量的值。
    使用%llu输出unsigned long long int变量的值。
 
  printf中的占位符，也叫做格式控制符。作用：
    1）不同类型的数据在变量中的存储形式是不一样的，比如float类型的小数，整数部分存储在高位，小数部分存储在低位
    为了保证可以正确读取出存储在变量中的数据，我们应该使用正确的格式控制符。例：TheNumberChar();
 
 3. 垃圾值的产生
 
    我们声明一个变量，如果没有为这个局部变量初始化，那么这个变量中可能是有值的，即为垃圾值，原因在于系统对变量的回收。
    当一段代码被执行完，作用域内的变量被系统立即回收，即告诉系统变量占用的字节不再使用，可以分配给其他变量，但原本变量所占的字节数据不会被清空。
    那么这个时候，新变量中可能就会遗留之前变量的值，即为垃圾值。
    所以，声明一个变量，最好能赋予初值。
 
 全局变量
    声明一个全局变量，系统会自动的将全局变量中的数据清零。
 
 
 */

//long修饰符
void LongAndShortIntSizeof(void);

//格式控制符的演示
void TheNumberChar(void);

int main(int argc, const char * argv[]) {
    TheNumberChar();
    return 0;
}

//格式控制符的演示
void TheNumberChar(void)
{
    int num = -16711839;
    printf("num = %c\n",num);//num = a

    // 因为%c，从给定变量的地址开始只读取1个字节，读出这个字节内的整数，再以其ASCII码还原为字符。

}

//long修饰符
void LongAndShortIntSizeof(void)
{
    long int num = 10;
    int len = sizeof(num);
    printf("num = %ld\n",num);
    printf("long修饰的 num 的字节数为 %d\n",len);
    short num2 = 20;
    printf("num2 = %hd\n",num2);
    printf("short修饰的 num2 的字节数为 %lu\n",sizeof(num2));
   
}
